<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">
  <link rel="alternate" href="/atom.xml" title="dy2903的博客" type="application/atom+xml">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">


<script id="hexo-configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '7.5.0',
    exturl: false,
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
    copycode: {"enable":false,"show_result":false,"style":null},
    back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
    bookmark: {"enable":false,"color":"#222","save":"auto"},
    fancybox: false,
    mediumzoom: false,
    lazyload: false,
    pangu: false,
    algolia: {
      appID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    },
    localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
    path: '',
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    translation: {
      copy_button: 'Copy',
      copy_success: 'Copied',
      copy_failure: 'Copy failed'
    },
    sidebarPadding: 40
  };
</script>

  <meta name="description" content="Fibre Channnel我们之前引入了SAN的概念，SAN首先是个网络，而不是存储设备。这个网络是专门来给主机连接存储设备用的。 我们知道按照SCSI总线16个节点的限制，不可能接入很多的磁盘，要扩大SAN的规模，只使用SCSI总线是不行的，所以必须找到一种可寻址容量大、稳定性强、速度块、传输距离远的网络结构。FC网络就应运而生。 FC网络Fibre Channnel也就是网状通道，FC协议从">
<meta property="og:type" content="article">
<meta property="og:title" content="大话存储，学习笔记（7,8章），FC协议">
<meta property="og:url" content="https:&#x2F;&#x2F;duyang2903.gitee.io&#x2F;2019&#x2F;11&#x2F;15&#x2F;%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%887,8%E7%AB%A0%EF%BC%89%EF%BC%8CFC%E5%8D%8F%E8%AE%AE&#x2F;index.html">
<meta property="og:site_name" content="dy2903的博客">
<meta property="og:description" content="Fibre Channnel我们之前引入了SAN的概念，SAN首先是个网络，而不是存储设备。这个网络是专门来给主机连接存储设备用的。 我们知道按照SCSI总线16个节点的限制，不可能接入很多的磁盘，要扩大SAN的规模，只使用SCSI总线是不行的，所以必须找到一种可寻址容量大、稳定性强、速度块、传输距离远的网络结构。FC网络就应运而生。 FC网络Fibre Channnel也就是网状通道，FC协议从">
<meta property="og:locale" content="en">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-73576bc9819d70d4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-7938957a77455401.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-8493680ac336abde.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-64feaa2083a02cda.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-3a6e3b149e5a95a0.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-c8fffe61b2207ff4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-8ec8dbac0cf3e18a.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-f81caa59df74d8ff.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-7e43db707c592a6f.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-c4eaccd2284dea41.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-0ef45f1f810095a0.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:updated_time" content="2019-11-13T13:27:13.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-73576bc9819d70d4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">

<link rel="canonical" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%887,8%E7%AB%A0%EF%BC%89%EF%BC%8CFC%E5%8D%8F%E8%AE%AE/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome: false,
    isPost: true,
    isPage: false,
    isArchive: false
  };
</script>

  <title>大话存储，学习笔记（7,8章），FC协议 | dy2903的博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-meta">

    <div>
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">dy2903的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
        <p class="site-subtitle">与肝胆人共事，从无字句读书</p>
  </div>

  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>
</div>


<nav class="site-nav">
  
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>

  </li>
  </ul>

</nav>
</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content">
            

  <div class="posts-expand">
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block " lang="en">
    <link itemprop="mainEntityOfPage" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%887,8%E7%AB%A0%EF%BC%89%EF%BC%8CFC%E5%8D%8F%E8%AE%AE/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="dy2903">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="dy2903的博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          大话存储，学习笔记（7,8章），FC协议
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">Posted on</span>

              <time title="Created: 2019-11-15 10:48:24" itemprop="dateCreated datePublished" datetime="2019-11-15T10:48:24+08:00">2019-11-15</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">Edited on</span>
                <time title="Modified: 2019-11-13 21:27:13" itemprop="dateModified" datetime="2019-11-13T21:27:13+08:00">2019-11-13</time>
              </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="Fibre-Channnel"><a href="#Fibre-Channnel" class="headerlink" title="Fibre Channnel"></a>Fibre Channnel</h1><p>我们之前引入了SAN的概念，SAN首先是个网络，而不是存储设备。这个网络是专门来给<strong>主机</strong>连接存储设备用的。</p>
<p>我们知道按照SCSI总线16个节点的限制，不可能接入很多的磁盘，要扩大SAN的规模，只使用SCSI总线是不行的，所以必须找到一种可寻址容量大、稳定性强、速度块、传输距离远的网络结构。FC网络就应运而生。</p>
<h2 id="FC网络"><a href="#FC网络" class="headerlink" title="FC网络"></a>FC网络</h2><p>Fibre Channnel也就是网状通道，FC协议从1988年出现，最开始作为高速骨干网技术。</p>
<p>任何互联系统都逃不过OSI模型，所以我们可以用OSI来将FC协议进行断层分析。</p>
<h3 id="物理层"><a href="#物理层" class="headerlink" title="物理层"></a>物理层</h3><p>首先有较高的速度：1Gb/s,2Gb/s,4Gb/s，8Gb/s到16Gbps</p>
<p>为了实现远距离传输，传输介质起码是<strong>光纤</strong></p>
<h3 id="链路层"><a href="#链路层" class="headerlink" title="链路层"></a>链路层</h3><h4 id="字符编码及FC帧结构"><a href="#字符编码及FC帧结构" class="headerlink" title="字符编码及FC帧结构"></a>字符编码及FC帧结构</h4><p>FC协议的帧头有24字节，比以太网帧头（14字节）还要长。</p>
<p>比如下图为以太网的报文格式。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-73576bc9819d70d4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>为什么FC协议需要这么长的帧头呢？因为24字节的帧头不但包含了寻址功能，还包含了<strong>传输功能保障。</strong>也就是说网络层和传输层的逻辑都用这24字节来传输。</p>
<p>这点就与TCP/IP+以太网不同，以太网基本上没有传输功能保证功能，主要需要靠TCP来进行端到端的传输保障。</p>
<p>我们可以对比一下TCP/IP和FC协议的开销：</p>
<p>基于以太网的TCP/IP网络，开销为：</p>
<blockquote>
<p>14字节(以太网帧头) + 20字节（IP头） + 20字节（TCP头） =54字节，或者把TCP帧头变为UDP（8字节）一共是42字节</p>
</blockquote>
<p>而FC协议就24字节，所以开销比TCP/IP的要小。</p>
<h3 id="网络层"><a href="#网络层" class="headerlink" title="网络层"></a>网络层</h3><p>FC网络中的节点要通信，无非也就是<strong>连、找、发</strong>三大要素。</p>
<ul>
<li><p>连：通过FC交换机打通通路，主要的拓扑结构有FC-AL和Fabric两种。</p>
</li>
<li><p>找：FC协议有一套于以太网不相同的编址方式，可以尽可能减少人为的干预。</p>
</li>
<li><p>发：指的是与目标进行通信</p>
</li>
</ul>
<p>从这个方面基本上就可以了解FC各节点交互的流程了。</p>
<h4 id="连：拓扑"><a href="#连：拓扑" class="headerlink" title="连：拓扑"></a>连：拓扑</h4><p>与以太网类似，FC也有两种拓扑：FC-AL和Fabric</p>
<ul>
<li>FC-AL：类似以太网<strong>共享总线拓扑</strong>，但是连接方式不是总线，而是仲裁环（Arbitral loop）。每个FC -AL 设备首尾接成了一个环路。最多能接入128个节点，实际上只用了8位的寻址容量。被广播地址、专用地址占用之后，只剩下127个实际可用的地址。</li>
</ul>
<p>仲裁环是应该 由所有设备串联而成的闭合环路，每个接口上都有一套旁路电路（Bypass Circuit）,一旦检测到本地设备故障，就会自动将这个接口短路。</p>
<p>一跳一跳的传输，而且任何时候只能按照一个方向向下游传输。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-7938957a77455401.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<ul>
<li>Fabric：与以太网交换拓扑类似。Fabric的意思是“网状构造”，表明其实是一种<strong>网状的交换矩阵</strong></li>
</ul>
<p>相对于仲裁环路来说<strong>转发效率提升了很多</strong>，联入矩阵所有节点可以同时进行<strong>点对点</strong>通信，加上<strong>包交换</strong>所带来的并发和资源充分利用，<strong>可使得交换架构获得的总带宽为所有端口带宽之和。</strong></p>
<p>而AL架构下，不管接入的节点有多少，带宽为恒定，即共享环路带宽。</p>
<p>下图为交换矩阵的示意图。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-8493680ac336abde.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>FC终端设备接入矩阵端点，一个设备发给另一个设备数据帧被交换矩阵收到后，矩阵会拨动交叉处的开关，连通电路，传输数据。所以可以把交换矩阵是一个大的电路开关矩阵，根据通信的源和目的决定波动哪些开关。</p>
<p>FC交换拓扑寻址容量是2的24次方个地址，比以太网理论值（2的48次方）少，但是对于专用的存储网足够。</p>
<h4 id="找：编址"><a href="#找：编址" class="headerlink" title="找：编址"></a>找：编址</h4><p>任何网络都需要寻址机制，所以需要对FC网络的每个设备定义一个唯一的标识。</p>
<ul>
<li>WWNN（World Wide Node Name）：每个设备自身有一个WWNN</li>
<li>WWPN(World Wide Port Name)：FC设备的每个端口都一个WWPN，是世界上唯一的。</li>
</ul>
<p><strong>以太网交换设备的端口不需要有MAC地址</strong>，而FC交换机却需要每个端口<strong>都有自己的WWPN。</strong>这是因为FC要做的工作比以太网交换机多，许多FC的逻辑都集成在了FC交换机。 需要处理到FC协议的最上层。而以太网相对简单，因为上层逻辑都被交给TCP/IP这样的上层协议来实现了。</p>
<p>WWPN：长度是64位，比MAC地址多16位。长度太长，速度低，所以在WWPN上映射一层寻址机制，分配一个Fabric ID，嵌入链路帧里面来做路由</p>
<p>这样WWPN被映射到了Fabric ID，一个24位的Fabric ID又被分为Domain ID、Area ID、Port ID三个亚寻址单元</p>
<ul>
<li><p>高8位定义为Domain区分符，用来区分网络中的FC交换机本身。Domain ID是自主交换机分配的。那<strong>主交换机</strong>怎么来的？它是根据WWNN号来进行选举，WWNN最小者获胜，成为主交换机，它就有资格向其他交换机分配Domain ID</p>
</li>
<li><p>中8位定义为Area区分符，区分同一台交换机的不同端口组。如果一块芯片可以管理1、2、3、4号FC端口，那么芯片可以属于一个Area</p>
</li>
<li><p>低8位定义为Port区分符，区分不同的Port</p>
</li>
</ul>
<h4 id="发：地址映射过程"><a href="#发：地址映射过程" class="headerlink" title="发：地址映射过程"></a>发：地址映射过程</h4><p>如下的讲解主要是针对Fabric 交换架构网络。</p>
<p>既然要把WWPN映射到Fabric ID上，就一定要有映射机制，那么每个端口如何获得Fabric ID的呢？过程比较类似于RARP协议。</p>
<p>当一个端口接到FC网络的时候，会向注册服务器发送一个注册申请，然后这个注册服务器会返回给它<strong>动态分配</strong>一个Fabric ID。当然此时注册服务器会记录这个映射关系。</p>
<p><strong>此后这个接口的帧不会携带WWPN，而是携带其被分配的ID作为源地址。</strong>这点就与以太网不同，我们知道 以太网既携带MAC又携带IP，所以在效率上打了折扣。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-64feaa2083a02cda.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h4 id="发：同步其他节点信息"><a href="#发：同步其他节点信息" class="headerlink" title="发：同步其他节点信息"></a>发：同步其他节点信息</h4><p>不过还有一个问题，一个端口要与另一个端口通信，那么怎么知道要通信目标的Fabric ID是多少呢？</p>
<p>每个节点获得自己的Fabric ID之后，还会进行<strong>名称注册</strong>。同样也是向名称服务器发送注册帧，主动告知自己的Fabric ID等信息。然后名称服务器其他节点的信息返回给它。这样就知道了其他节点地址呢。</p>
<p>如果FC网络比较大，则可能不只一台FC交换机。也就是说有若干FC交换机互联。与IP网络不同的是，FC网络不需要<strong>太多的人工介入</strong>，它们会自动协商自己的Domain ID（可以回过去看看Fabric ID的结构），选举出主交换机，由主交换机来为其他的交换机分配Domain ID。交换机之间会运行OSPF等路由协议，这样可以交互节点信息，寻址各个节点。</p>
<p>现在我们可以与IP网络对比一下，IP网络需要很强的人为介入性，需要人来配置节点的IP地址、路由信息等，而FC网络则可以自动分配和管理地址。最根本原因是因为FC协议一开始设计就是为了高速、高效的网络，而不是给Internet使用的。所以自动分配地址当然适合。</p>
<h4 id="发：与目标通信"><a href="#发：与目标通信" class="headerlink" title="发：与目标通信"></a>发：与目标通信</h4><p>此时每个节点已经获得了Fabric ID了，同时还从名称服务器得知网络上其他节点的ID，万事俱备，完全可以与其他节点进行通信了。</p>
<ul>
<li><p>首先需要直接向目的端口发起一个N_PORT Login过程，目的协商一系列的参数</p>
</li>
<li><p>然后进行Process Login过程（类似TCP向端口发送握手包），即进行应用程序间的通信。比如FC可以承载SCSI协议，那么此时Initiator端就需要向Target端发起请求了。</p>
</li>
<li><p>这些Login过程其实就是上三层的内容，属于会话层。但是Login帧也必须通过下4层来封装并传输到目的地，就像TCP握手一样。</p>
</li>
</ul>
<p>FC网络中还有一中<strong>FC Control Service</strong>，如果节点向这个服务进行注册了以后，一旦网络状态有变动，将会把最新的信息同步到这些节点。</p>
<h4 id="最后一点"><a href="#最后一点" class="headerlink" title="最后一点"></a>最后一点</h4><p>上面提到的名称服务器、注册服务器其实一般都是运行在交换机内部的，而不是物理上的服务器。</p>
<h3 id="传输层"><a href="#传输层" class="headerlink" title="传输层"></a>传输层</h3><p>FC协议的传输层的作用与TCP相似，也也进行Segment以及通过端口号区分上层应用。</p>
<ul>
<li>对上层数据流进行Segment。<br>每个Exchange（上层程序）发来的数据包，被FC传输层分割为Information Unit，类似于TCP的Segment。<br>然后下层协议为每个Segment分配一个Sequence ID，再分割为FC所适应的帧</li>
</ul>
<ul>
<li>区分上层程序。TCP是通过端口号，而FC协议是通过Exchange ID来区分。</li>
</ul>
<h2 id="FC适配器"><a href="#FC适配器" class="headerlink" title="FC适配器"></a>FC适配器</h2><p>要构建一个完整的FC网络，除了需要FC交换机，还需要FC适配器(FC HBA,Host Bus Adapter)</p>
<blockquote>
<p>HBA可以指代任何一种设备，只要这个设备的作用是将一个外部功能接入<strong>主机</strong>总线，所以PCIE网卡、声卡和显卡都可以叫HBA。</p>
</blockquote>
<p>下图是用来接入FC网络的各种线缆，有SC光纤，DB9铜线和RJ45/47线缆。可以看出FC不一定是光纤</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-3a6e3b149e5a95a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>FC适配器有自己的CPU、RAM、ROM。是一个嵌入式设备。与RAID卡类似，只是不像RAID卡需要那么多的RAM来做数据缓存。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-c8fffe61b2207ff4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h1 id="SCSI迁移到FC"><a href="#SCSI迁移到FC" class="headerlink" title="SCSI迁移到FC"></a>SCSI迁移到FC</h1><h2 id="如何迁移"><a href="#如何迁移" class="headerlink" title="如何迁移"></a>如何迁移</h2><p>在上面一章我们把FC协议进行了简单的介绍，现在是时候把SCSI迁移到FC上了。</p>
<p>回顾一下，为什么要这么做，因为SCSI总线只能接16个节点，不利于扩展，同时传输的距离有限，而且不够高效等。所以我们可以在主机与后端存储之间使用FC协议，把基于并行SCSI总线的存储网络架构迁移到FC的网络架构。</p>
<p>迁移的过程中存在一个问题，我们知道FC协议并没有定义<strong>SCSI指令集</strong>这样面向磁盘存储数据的通用语言。那怎么解决这个问题呢？</p>
<p>在<a href="http://www.cnblogs.com/dy2903/p/8426597.html" target="_blank" rel="noopener">【大话存储】学习笔记（13章），协议融合</a>中提到了协议融合，此时FC协议与SCSI协议有重叠，但是FC协议在某些方面可以做得更好，所以可以<strong>将SCSI语言承载于FC协议进行传送。</strong></p>
<p><strong>将连接主机和磁盘阵列的通路从并行的SCSI总线替换为串行传输的FC通路。但是盘阵后端连接磁盘的接口还是SAS接口。</strong><br><img src="http://upload-images.jianshu.io/upload_images/1323506-8ec8dbac0cf3e18a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>这样单台盘阵所能接入的磁盘容量没有提升，但<strong>是前端的性能</strong>提升了，因为使用FC协议，可以更为的高速。</p>
<h2 id="好处"><a href="#好处" class="headerlink" title="好处"></a>好处</h2><p>引入FC之后，带来的好处为</p>
<ul>
<li>如果一个盘阵只有一个FC接口，那么我们完全可以使用FC交换机来扩充端口。而且采用了这样的<strong>包交换</strong>架构，可以实现多个节点向一个节点收发数据，传输效率大大提升。</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-f81caa59df74d8ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>这样就实现了多台主机共享一个盘阵，提升了盘阵的利用率。</p>
<ul>
<li><p>而且因为可以使用光纤，所以传输距离加长了。</p>
</li>
<li><p>FC协议功能更为丰富，可以为<strong>每台主机</strong>划分不同的LUN，保证了安全性。<br>既然所有的主机都挂在了盘阵上，怎么保证每台主机能独享一块LUN呢？可以从FC交换机，磁盘阵列控制器入手。</p>
<ul>
<li><p>在磁盘控制器上做手脚：</p>
<p>在SCSI协议中有这样一个过程，此时Initiator想要与Target要进行通信，Initiator需要发一条Report LUN指令给Target，Target端在收到这条指令以后，需要返回自己的<strong>LUN信息</strong>。那么磁盘控制器可以 LUN的时候，<strong>根据发起端的身份，提供相应的LUN给它。</strong>如果强行访问其他的LUN，就会拒绝。这种方法就叫<strong>LUN masking</strong></p>
<p>总的来说，可以把LUN当做蛋糕，磁盘控制器就是主人，他可以调查每个主机的身份，根据不同的身份来分配蛋糕。</p>
<p>注意，这是SCSI指令集的功能，只要承载了SCSI指令集的协议就可以实现这个功能。</p>
</li>
<li><p>在FC交换机上做手脚：<br>我们知道以太网交换机可以划分VLAN，也就是可以把某几个端口划分到一个逻辑上的<strong>LAN</strong>中。同样FC交换机也可以实现类似的功能，不过名字叫<code>ZONE</code>。<br>ZONE有软ZONE和硬ZONE之分。</p>
<ul>
<li><p>软ZONE：在名称服务器上做手脚，欺骗进行名称注册的节点，向他们通告其他节点信息。</p>
</li>
<li><p>硬ZONE：把交换机某端口归为一个ZONE，底层完全隔离。如下</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-7e43db707c592a6f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="多路径访问目标"><a href="#多路径访问目标" class="headerlink" title="多路径访问目标"></a>多路径访问目标</h2><p>如果盘阵有<strong>两个控制器</strong>，每个主机上都有两块FC适配卡，它们都连接到了FC交换机。</p>
<p>这样会存在一个问题，因为主机有两块HBA卡，而每块HBA可以识别两块LUN，所以整个主机会识别出4块磁盘，这就有问题了，因为这样磁盘就有重复了，造成了混乱。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-c4eaccd2284dea41.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>那么你可能会说，为啥要两块FC HBA卡呢？因为一块HBA有<strong>单点故障</strong>，如果使用两块HBA卡，一旦一块HBA卡出现了故障，另一块卡依然可以维持主机到盘阵的通路。</p>
<p><strong>那多路径的问题怎么解决：</strong>可以在操作系统中安装<strong>多路径软件</strong>，它可以识别FC提交上来的LUN，向操作系统提交单份LUN。这个软件还有个作用，如果某个<strong>控制器</strong>发生故障，通过这个软件立即重定向到另一个控制器。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-0ef45f1f810095a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>

    </div>

    
    
    

      <footer class="post-footer">

        

          <div class="post-nav">
            <div class="post-nav-next post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8820%E7%AB%A0%EF%BC%89%EF%BC%8C%E4%BA%91%E5%AD%98%E5%82%A8/" rel="next" title="大话存储，学习笔记（20章），云存储">
                  <i class="fa fa-chevron-left"></i> 大话存储，学习笔记（20章），云存储
                </a>
            </div>

            <span class="post-nav-divider"></span>

            <div class="post-nav-prev post-nav-item">
            </div>
          </div>
      </footer>
    
  </article>
  
  
  

  </div>


          </div>
          

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#Fibre-Channnel"><span class="nav-number">1.</span> <span class="nav-text">Fibre Channnel</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#FC网络"><span class="nav-number">1.1.</span> <span class="nav-text">FC网络</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#物理层"><span class="nav-number">1.1.1.</span> <span class="nav-text">物理层</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#链路层"><span class="nav-number">1.1.2.</span> <span class="nav-text">链路层</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#字符编码及FC帧结构"><span class="nav-number">1.1.2.1.</span> <span class="nav-text">字符编码及FC帧结构</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#网络层"><span class="nav-number">1.1.3.</span> <span class="nav-text">网络层</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#连：拓扑"><span class="nav-number">1.1.3.1.</span> <span class="nav-text">连：拓扑</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#找：编址"><span class="nav-number">1.1.3.2.</span> <span class="nav-text">找：编址</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#发：地址映射过程"><span class="nav-number">1.1.3.3.</span> <span class="nav-text">发：地址映射过程</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#发：同步其他节点信息"><span class="nav-number">1.1.3.4.</span> <span class="nav-text">发：同步其他节点信息</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#发：与目标通信"><span class="nav-number">1.1.3.5.</span> <span class="nav-text">发：与目标通信</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#最后一点"><span class="nav-number">1.1.3.6.</span> <span class="nav-text">最后一点</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#传输层"><span class="nav-number">1.1.4.</span> <span class="nav-text">传输层</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#FC适配器"><span class="nav-number">1.2.</span> <span class="nav-text">FC适配器</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#SCSI迁移到FC"><span class="nav-number">2.</span> <span class="nav-text">SCSI迁移到FC</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#如何迁移"><span class="nav-number">2.1.</span> <span class="nav-text">如何迁移</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#好处"><span class="nav-number">2.2.</span> <span class="nav-text">好处</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#多路径访问目标"><span class="nav-number">2.3.</span> <span class="nav-text">多路径访问目标</span></a></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">dy2903</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">20</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">2</span>
        <span class="site-state-item-name">tags</span>
      </div>
  </nav>
</div>
  <div class="feed-link motion-element">
    <a href="/atom.xml" rel="alternate">
      <i class="fa fa-rss"></i>RSS
    </a>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">dy2903</span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v4.0.0
  </div>
  <span class="post-meta-divider">|</span>
  <div class="theme-info">Theme – <a href="https://pisces.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Pisces</a> v7.5.0
  </div>

        












        
      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script><script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>



  
















  

  

</body>
</html>
